package main

import (
	"errors"
	"fmt"
)

const SDY = 2

//如果需要，也可以明确指定常量的类型：
const Pi float32 = 3.1415926

//示例代码
var isActive bool                   // 全局变量声明
var enabled, disabled = true, false // 忽略类型的声明
func test() {
	var available bool // 一般声明
	valid := false     // 简短声明
	available = true   // 赋值操作
	fmt.Printf("%t\n", available)
	fmt.Printf("%t\n", valid)
	fmt.Printf("c的值:%t,d的值:%t,e的值:%t\n", isActive, enabled, disabled)
}

func main11() {
	////定义一个名称为“variableName”，类型为"type"的变量
	//var a string
	//var b int8
	//var c,d,e string = "2","3","4"
	///*
	//	定义三个变量，它们分别初始化为相应的值
	//	vname1为v1，vname2为v2，vname3为v3
	//	编译器会根据初始化的值自动推导出相应的类型
	//*/
	//vname1, vname2, vname3 := 6, 7, 8
	//
	//a = "ss"
	//b = 14
	//fmt.Printf("%s\n",a)
	//fmt.Printf("%d\n",b)
	//fmt.Printf("c的值:%s,d的值:%s,e的值:%s\n",c,d,e)
	//fmt.Printf("c的值:%d,d的值:%d,e的值:%d\n",vname1,vname2,vname3)
	//fmt.Printf("%d\n",SDY)
	//fmt.Printf("%f\n",Pi)
	demo3()
}

func demo1() {

	var arr [10]int                                 // 声明了一个int类型的数组
	arr[0] = 42                                     // 数组下标是从0开始的
	arr[1] = 13                                     // 赋值操作
	fmt.Printf("The first element is %d\n", arr[0]) // 获取数据，返回42
	fmt.Printf("The last element is %d\n", arr[9])  //返回未赋值的最后一个元素，默认返回0

	//a := [3]int{1, 2, 3} // 声明了一个长度为3的int数组

	//b := [10]int{1, 2, 3} // 声明了一个长度为10的int数组，其中前三个元素初始化为1、2、3，其它默认为0

	//c := [...]int{4, 5, 6} // 可以省略长度而采用`...`的方式，Go会自动根据元素个数来计算长度
	//
	//
	//// 声明了一个二维数组，该数组以两个数组作为元素，其中每个数组中又有4个int类型的元素
	//doubleArray := [2][4]string{
	//	[4]string{1, 2, 3, 4},
	//	[4]string{"50", "6", "7", "8"},
	//}
	//fmt.Println(doubleArray)
	//
	//// 上面的声明可以简化，直接忽略内部的类型
	easyArray := [2][4]int{
		{1, 2, 3, 4},
		{5, 6, 7, 8},
	}
	fmt.Println(easyArray)

	slice := []byte{'a', 'b', 'c', 'd'}
	fmt.Println(slice)

}

func demo2() {

	// 声明一个含有10个元素元素类型为byte的数组
	var ar = [...]byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}

	// 声明两个含有byte的slice
	var a, b []byte

	// a指向数组的第3个元素开始，并到第五个元素结束，
	a = ar[2:5]
	//现在a含有的元素: ar[2]、ar[3]和ar[4]

	// b是数组ar的另一个slice
	b = ar[3:5]
	// b的元素是：ar[3]和ar[4]
	fmt.Println(a)
	fmt.Println(b)
	//fmt.Fprintln(a)
}

func demo3() {

	err := errors.New("emit macho dwarf: elf header corrupted")
	if err != nil {
		fmt.Print(err)
	}

}

//
////示例代码
//var frenchHello string  // 声明变量为字符串的一般方法
//var emptyString string = ""  // 声明了一个字符串变量，初始化为空字符串
//func test() {
//	no, yes, maybe := "no", "yes", "maybe"  // 简短声明，同时声明多个变量
//	japaneseHello := "Konichiwa"  // 同上
//	frenchHello = "Bonjour"  // 常规赋值
//}
